#ifndef PLANO_H
#define PLANO_H

#include "Raio.h"
#include "Objeto_3d.h"

#define INSIDE(a,b,c) (((b>a)&&(a>c))||((b<a)&&(a<c)))

//* classe Plano #Plano#
  //* Define um plano. Esta classe é mãe das classes PlanoX, PlanoY e PlanoZ.
class Plano : public Objeto_3D{
  protected:
    float a, bmin, bmax, cmin, cmax;

  public:
 //* Construtor e Destrutor
    Plano( float _a, float _bmin, float _bmax, float _cmin, float _cmax, int ind) : Objeto_3D(ind),
      a(_a), bmin(_bmin), bmax(_bmax), cmin(_cmin), cmax(_cmax) {}
    Plano( const Plano& p): Objeto_3D(p), a(p.getA()), bmin(p.getBmin()), bmax(p.getBmax()),
                            cmin(p.getCmin()), cmax(p.getCmax()) {}
    ~Plano() {}
 //* interseção. Função pura virtual para ser implementada pelos herdeiros
    virtual const Objeto_3D* Intercepta( Raio r_vis, float* t) const = 0;
    virtual Vetor_3D normal( const Ponto_3D& ponto ) const  = 0;
    
    float getA(void) const { return a; }
    float getBmin(void) const { return bmin; }
    float getBmax(void) const { return bmax; }
    float getCmin(void) const { return cmin; }
    float getCmax(void) const { return cmax; }
};

#endif // PLANO_H
